Skip to content

Login fix, reply webview hack, bypass age verification, and fixes#90

Open
theacrat wants to merge 54 commits into
NeoFreeBird:masterfrom
theacrat:master
Open

Login fix, reply webview hack, bypass age verification, and fixes#90
theacrat wants to merge 54 commits into
NeoFreeBird:masterfrom
theacrat:master

Conversation

@theacrat

@theacrat theacrat commented Jun 19, 2026

Copy link
Copy Markdown
  • Reimplements a 9.67-like login flow to avoid attestation
  • Bypasses age verification
  • Opens the reply intent in a webview with the current account to avoid attestation
  • Fixes Chat not working (replace keychainfix with zxPluginsInject)
  • Fixes crash toggling settings
  • Fixes crash inserting download button on new versions

Tested on X 11.99.

High chance some of these changes are unnecessarily complex with fallbacks and stuff as I got sick of trial and erroring every single flow.

Example built IPA here: https://github.com/theacrat/NeoFreeBird/releases

@theacrat theacrat changed the title Reply webview hack, bypass age verification, and fixes Login fix, reply webview hack, bypass age verification, and fixes Jul 3, 2026
theacrat and others added 9 commits July 8, 2026 06:23
Set textContentType (username / password) on the xAuth login fields so iOS
recognises the form and offers saved logins and the Passwords key in the
QuickType bar — the native equivalent of tagging a web form's inputs with
autocomplete=username / current-password.
…#4)

The composer's Post button disappeared whenever "Hide Grok analyze buttons"
was on, making posting impossible (#2). BHTRemoveGrokBarButtonItems matched
every UIBarButtonItem with a nil accessibilityLabel: [nil rangeOfString:@"grok"]
.location is 0 (a zeroed NSRange from messaging nil), which is != NSNotFound,
so unlabeled bar buttons — the Post button included — were deleted. Guard for a
non-nil label before matching.

Also replace the over-broad TFNButton didMoveToWindow Grok heuristic (it hid any
unlabeled nav-bar button that had a menu — the Post button is exactly that) with
positive identification: hide only TFNButtons whose primary-action menu contains
a Grok item ("Analyse with Grok" / "Open in Grok").

Other broken toggles:
- restore_follow_button ("No Subscribe button"): drop the unconditional
  -[TUIFollowControl variant] override that returned 32 for every read, which
  hid the Follow button on every tweet. The setVariant: remap already converts
  Subscribe (1) -> Follow (32).
- hidePremiumOffer ("No Twitter Blue prompts"): read the pref instead of a
  hardcoded `return YES` (the toggle was stuck on).
- DisableVODCaptions ("No video captions"): read the key the settings UI writes
  (video_layer_caption) instead of an unexposed dis_VODCaptions (toggle was dead).
- refresh_pill_label: scope the "Tweeted" relabel to the new-posts pill instead
  of overriding every TFNPillControl's text.

Co-authored-by: thea <git@thea.pet>
gingerbeardman and others added 8 commits July 8, 2026 23:44
New Tweets setting (hide_downvote_button, default off) that removes the
downvote/dislike button X shows on replies.

The button (TTAStatusInlineDownvoteButton, in TwitterAppSPMMigration) is
created unconditionally and its display is driven at layout time by its
-visibility property: TTAStatusInlineActionsView lays out only buttons whose
visibility is non-zero and hides the rest. Filtering the inline-action class
list (and forcing the +t1_shouldShowDownvoteButtonForViewModel… gate to NO)
was not enough on its own because the button is still instantiated, so the
decisive fix overrides -[TTAStatusInlineDownvoteButton visibility] to return 0
when the toggle is on — excluding it from layout with no gap. The class-list
filter and gate override are kept as upstream defense-in-depth.

Localized in all bundled languages.
@theacrat

Copy link
Copy Markdown
Author

I've stopped updating this branch because I've done a large refactor to organise things in my v6 branch. You're free to take that as well of course.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants